"""
send_email.py：配置收发邮件
这里用的是163的smtp服务器，不适用QQ服务器
"""
# !/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time   : 2023/5/7
# @Author : Renee

import os
import smtplib
import zipfile
from email.mime.text import MIMEText  # 正文用
from email.header import Header  # 标题用
from utils.config.read_ini import *


class SendEmail:
    def __init__(self, fujian_name, dir_path, compress_name):
        self.fujian_name = fujian_name  # 附件名称
        self.dir_path = dir_path  # 需要打包的文件地址
        self.compress_name = compress_name  # 发送的文件名称

    def zipdir(self):
        """
        需要发送的文件打包成zip格式
        :return:
        """
        _zip = zipfile.ZipFile(self.compress_name, "w", zipfile.ZIP_DEFLATED)
        for path, dir_path, filenames in os.walk(self.dir_path):
            # 去掉目标跟路径，只对目标文件夹下边的文件及文件夹进行压缩
            fpath = path.replace(self.dir_path, '')

            for filename in filenames:
                _zip.write(os.path.join(path, filename), os.path.join(fpath, filename))
        _zip.close()
        print('压缩成功')

    def run(self):
        """
        发送邮件给单个人
        :return:
        """
        # 收发件人基本信息
        send_user = get_send_user_list()  # 发件人邮箱地址
        send_password = "hpafldmyerohbcdh"  # 发件人163邮箱的smtp密码
        send_smtp = "smtp.qq.com"  # 邮箱smtp官方地址
        addressee = get_addressee_list()  # 收件人邮箱地址

        # 发送的附件内容，数据编码方式是utf-8，邮件正文是MIMEText
        msg = MIMEText(open(self.fujian_name, 'rb').read(), "base64", "utf-8")
        msg['Content-Type'] = 'application/octet-stream'
        msg["Content-Disposition"] = 'attachment; filename=' + self.fujian_name

        # 邮件对象
        msg['Subject'] = Header(u'附件为Renee的自动化测试报告', 'utf-8').encode()  # u一般用在中文字符串前面，防止因为源码储存格式问题
        msg['From'] = Header(u"1050905704@qq.com<%s>" % send_user)  # 发件人，声明收到邮件的时候发件人显示用（11不能写中文）
        msg['To'] = u'Eason'  # 收件人的名字（测试负责人）

        # 发送邮件
        smtp = smtplib.SMTP()
        smtp.connect(send_smtp, 25)  # 这是发送出去的邮箱的smtp的地址和默认端口
        smtp.login(send_user, send_password)  # 这是登录的账号和smtp密码，用于除了网页以外的客户端登录
        smtp.sendmail(send_user, addressee, msg.as_string())  # 发送邮件，传入发送账号，接收账号，将from和to subject当做字符串传入
        smtp.quit()  # 关闭连接
        print("邮件已发出！注意查收。")

    # def error_mail(self, error_message: str) -> None:
    #     """
    #     执行异常邮件通知
    #     @param error_message: 报错信息
    #     @return:
    #     """
    #     email = config.email.send_list
    #     user_list = email.split(',')  # 多个邮箱发送，config文件中直接添加  '806029174@qq.com'
    #
    #     sub = config.project_name + "接口自动化执行异常通知"
    #     content = f"自动化测试执行完毕，程序中发现异常，请悉知。报错信息如下：\n{error_message}"
    #     self.SendEmail(user_list, sub, content)
